package com.MusicWeb.service;

import com.MusicWeb.entity.User;
import com.MusicWeb.dao.DB;

import java.util.List;
import java.util.Map;

public class UserService {
    /**
     * 用户登录业务方法
     *
     * @param account  用户账号
     * @param password 用户密码
     * @return 返回true表示登录成功，返回false表示登录失败
     */
    public User login(String account, String password) {
        // 调用DB执行sql语句，传入一个参数：account
        List<Map<String, Object>> result = DB.executeQuery("select * from user where account = ?", account);
        // 用于存数据库中的密码
        String dbPwd = null;
        User user = null;
        if (result != null) {
            user = new User();
            // 从查询的结果集中，取出最后一条的PASSWORD（理论上至多1条，可能0条）
            for (Map<String, Object> stringObjectMap : result) {
                user.setId((Integer) stringObjectMap.get("id"));
                user.setAccount((String) stringObjectMap.get("account"));
                user.setPassword((String) stringObjectMap.get("password"));
                user.setName((String)stringObjectMap.get("name"));
                dbPwd = (String) stringObjectMap.get("password");
            }
        }
        // 检查用户输入的密码和数据库存储的密码是否一致
        if (dbPwd.equals(password)) {
            return user;
        }
        return null;
    }

    /**
     * 用户注册业务方法
     *
     * @param user 要创建的用户账号信息
     * @return 如果创建成功，返回用户对象，否则返回null
     */
    public User register(User user) {
        try {
            // 根据传入的user对象，执行对应的新增sql
            int a = DB.executeUpdate("insert into user (account, password,name) " +
                            " values (?, ? , ? )"
                    , user.getAccount()
                    , user.getPassword()
                    , user.getName());
            // SQL执行结果为-1，表示有数据库执行错误，返回null
            if (a == -1) {
                return null;
            }
        } catch (Exception e) {
            // 报出异常，插入失败，返回null
            e.printStackTrace();
            return null;
        }
        // 正常情况下返回user对象，表示插入成功
        return user;
    }

    /**
     * 前端登录成功后
     * 传入用户的id与 token参数   更新数据库表中的token
     */
    public boolean token(Integer id, String token) {
        try {
            // 根据传入的user对象，执行对应的新增sql
            int a = DB.executeUpdate("update user set token=? WHERE id=?;"
                    , token
                    , id);
            // SQL执行结果为-1，表示有数据库执行错误，返回null
            if (a == -1) {
                return false;
            }
        } catch (Exception e) {
            // 报出异常，插入失败，返回null
            e.printStackTrace();
            return false;
        }
        // 正常情况下返回user对象，表示插入成功
        return true;
    }

    /**
     * 前端 根据token  查询user表中是否有对应的token 并且返回 用户的信息
     */
    public User Selecttoken(String token) {
        // 调用DB执行sql语句，传入一个参数：account
        List<Map<String, Object>> result = DB.executeQuery("select * from user where token = ?", token);
        // 用于存数据库中的密码
        User user = null;
        if (result != null) {
            user = new User();
            // 从查询的结果集中，取出最后一条的PASSWORD（理论上至多1条，可能0条）
            for (Map<String, Object> stringObjectMap : result) {
                user.setId((Integer) stringObjectMap.get("id"));
                user.setAccount((String) stringObjectMap.get("account"));
                user.setPassword((String) stringObjectMap.get("password"));
            }
        }
        if (user != null) {
            return user;
        }
        return null;
    }

}
